Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

core/database/src/commonMain/kotlin/org/meshtastic/core/database/entity/NodeEntity.kt 4e15ef1c7f68f8c683fe8b7ff741a5167e154d2e (4e15ef1c) Text, 8.95 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.database.entity

Tff7b72import T7ee787androidx.room3.ColumnInfo
Tff7b72import T7ee787androidx.room3.Embedded
Tff7b72import T7ee787androidx.room3.Entity
Tff7b72import T7ee787androidx.room3.Index
Tff7b72import T7ee787androidx.room3.PrimaryKey
Tff7b72import T7ee787androidx.room3.Relation
Tff7b72import T7ee787okio.ByteString
Tff7b72import T7ee787okio.ByteString.Companion.toByteString
Tff7b72import T7ee787org.meshtastic.core.common.util.nowMillis
Tff7b72import T7ee787org.meshtastic.core.common.util.nowSeconds
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.util.onlineTimeThreshold
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetadata
Tff7b72import T7ee787org.meshtastic.proto.HardwareModel
Tff7b72import T7ee787org.meshtastic.proto.MeshPacket
Tff7b72import T7ee787org.meshtastic.proto.Paxcount
Tff7b72import T7ee787org.meshtastic.proto.Telemetry
Tff7b72import T7ee787org.meshtastic.proto.User
Tff7b72import T7ee787org.meshtastic.proto.Position Tff7b72as Te6edf3WirePosition

Tff7b72data Tff7b72class T56d364NodeWithRelationsTb4b4b4(
Tf0883e@Embedded Tff7b72val Te6edf3nodeTb4b4b4: Te6edf3NodeEntityTb4b4b4,
Tf0883e@RelationTb4b4b4(Te6edf3entity Tff7b72= Te6edf3MetadataEntityTff7b72::Te6edf3classTb4b4b4, Te6edf3parentColumns Tff7b72= Tff7b72[Ta5d6ff"Ta5d6ffnumTa5d6ff"Tff7b72]Tb4b4b4, Te6edf3entityColumns Tff7b72= Tff7b72[Ta5d6ff"Ta5d6ffnumTa5d6ff"Tff7b72]Tb4b4b4)
Tff7b72val Te6edf3metadataTb4b4b4: Te6edf3MetadataEntity?Tb4b4b4,
Tb4b4b4) Tb4b4b4{
T8b949e// Direct construction avoids the previous `node.toModel().copy(metadata = …, manuallyVerified = …)` pattern,
T8b949e// which allocated the Node twice per DB row (once from toModel, once from copy). Hot path on every DB emission.
Tff7b72fun Td2a8fftoModelTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3NodeTb4b4b4(
Te6edf3num Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3numTb4b4b4,
Te6edf3user Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4,
Te6edf3position Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3positionTb4b4b4,
Te6edf3snr Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3snrTb4b4b4,
Te6edf3rssi Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3rssiTb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3lastHeardTb4b4b4,
Te6edf3deviceMetrics Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3deviceMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3DeviceMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3channel Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3channelTb4b4b4,
Te6edf3viaMqtt Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3viaMqttTb4b4b4,
Te6edf3hopsAway Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3hopsAwayTb4b4b4,
Te6edf3isFavorite Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3isFavoriteTb4b4b4,
Te6edf3isIgnored Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3isIgnoredTb4b4b4,
Te6edf3isMuted Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3isMutedTb4b4b4,
Te6edf3environmentMetrics Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3environmentMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3EnvironmentMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3powerMetrics Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3powerMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3PowerMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3airQualityMetrics Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3airQualityMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3AirQualityMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3paxcounter Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3paxcounterTb4b4b4,
Te6edf3publicKey Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3publicKey Tff7b72?: Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3public_keyTb4b4b4,
Te6edf3notes Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3notesTb4b4b4,
Te6edf3nodeStatus Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3nodeStatusTb4b4b4,
Te6edf3lastTransport Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3lastTransportTb4b4b4,
Te6edf3metadata Tff7b72= Te6edf3metadataTff7b72?.Te6edf3protoTb4b4b4,
Te6edf3manuallyVerified Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3manuallyVerifiedTb4b4b4,
Tb4b4b4)

Tff7b72fun Td2a8fftoEntityTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3withTb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4{
Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= Te6edf3numTb4b4b4,
Te6edf3user Tff7b72= Te6edf3userTb4b4b4,
Te6edf3position Tff7b72= Te6edf3positionTb4b4b4,
Te6edf3snr Tff7b72= Te6edf3snrTb4b4b4,
Te6edf3rssi Tff7b72= Te6edf3rssiTb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3lastHeardTb4b4b4,
Te6edf3deviceTelemetry Tff7b72= Te6edf3deviceTelemetryTb4b4b4,
Te6edf3channel Tff7b72= Te6edf3channelTb4b4b4,
Te6edf3viaMqtt Tff7b72= Te6edf3viaMqttTb4b4b4,
Te6edf3hopsAway Tff7b72= Te6edf3hopsAwayTb4b4b4,
Te6edf3isFavorite Tff7b72= Te6edf3isFavoriteTb4b4b4,
Te6edf3isIgnored Tff7b72= Te6edf3isIgnoredTb4b4b4,
Te6edf3isMuted Tff7b72= Te6edf3isMutedTb4b4b4,
Te6edf3environmentTelemetry Tff7b72= Te6edf3environmentTelemetryTb4b4b4,
Te6edf3powerTelemetry Tff7b72= Te6edf3powerTelemetryTb4b4b4,
Te6edf3airQualityTelemetry Tff7b72= Te6edf3airQualityTelemetryTb4b4b4,
Te6edf3paxcounter Tff7b72= Te6edf3paxcounterTb4b4b4,
Te6edf3publicKey Tff7b72= Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3public_keyTb4b4b4,
Te6edf3notes Tff7b72= Te6edf3notesTb4b4b4,
Te6edf3manuallyVerified Tff7b72= Te6edf3manuallyVerifiedTb4b4b4,
Te6edf3nodeStatus Tff7b72= Te6edf3nodeStatusTb4b4b4,
Te6edf3lastTransport Tff7b72= Te6edf3lastTransportTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@EntityTb4b4b4(Te6edf3tableName Tff7b72= Ta5d6ff"Ta5d6ffmetadataTa5d6ff"Tb4b4b4, Te6edf3indices Tff7b72= Tff7b72[Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6ffnumTa5d6ff"Tff7b72]Tb4b4b4)Tff7b72]Tb4b4b4)
Tff7b72data Tff7b72class T56d364MetadataEntityTb4b4b4(
Tf0883e@PrimaryKey Tff7b72val Te6edf3numTb4b4b4: Tffa657IntTb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffprotoTa5d6ff"Tb4b4b4, Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4) Tff7b72val Te6edf3protoTb4b4b4: Te6edf3DeviceMetadataTb4b4b4,
Tff7b72val Te6edf3timestampTb4b4b4: Tffa657Long Tff7b72= Te6edf3nowMillisTb4b4b4,
Tb4b4b4)

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tf0883e@EntityTb4b4b4(
Te6edf3tableName Tff7b72= Ta5d6ff"Ta5d6ffnodesTa5d6ff"Tb4b4b4,
Te6edf3indices Tff7b72=
Tff7b72[
Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6fflast_heardTa5d6ff"Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6ffshort_nameTa5d6ff"Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6fflong_nameTa5d6ff"Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6ffhops_awayTa5d6ff"Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6ffis_favoriteTa5d6ff"Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6fflast_heardTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffis_favoriteTa5d6ff"Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3IndexTb4b4b4(Te6edf3value Tff7b72= Tff7b72[Ta5d6ff"Ta5d6ffpublic_keyTa5d6ff"Tff7b72]Tb4b4b4)Tb4b4b4,
Tff7b72]Tb4b4b4,
Tb4b4b4)
Tff7b72data Tff7b72class T56d364NodeEntityTb4b4b4(
Tf0883e@PrimaryKeyTb4b4b4(Te6edf3autoGenerate Tff7b72= Tff7b72falseTb4b4b4) Tff7b72val Te6edf3numTb4b4b4: Tffa657IntTb4b4b4, T8b949e// This is immutable, and used as a key
Tf0883e@ColumnInfoTb4b4b4(Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4) Tff7b72var Te6edf3userTb4b4b4: Te6edf3User Tff7b72= Te6edf3UserTb4b4b4(Tb4b4b4)Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6fflong_nameTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3longNameTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffshort_nameTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3shortNameTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4, T8b949e// used in includeUnknown filter
Tf0883e@ColumnInfoTb4b4b4(Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4) Tff7b72var Te6edf3positionTb4b4b4: Te6edf3WirePosition Tff7b72= Te6edf3WirePositionTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72var Te6edf3latitudeTb4b4b4: Tffa657Double Tff7b72= T79c0ff0.0Tb4b4b4,
Tff7b72var Te6edf3longitudeTb4b4b4: Tffa657Double Tff7b72= T79c0ff0.0Tb4b4b4,
Tff7b72var Te6edf3snrTb4b4b4: Tffa657Float Tff7b72= Tffa657FloatTb4b4b4.Te6edf3MAX_VALUETb4b4b4,
Tff7b72var Te6edf3rssiTb4b4b4: Tffa657Int Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6fflast_heardTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3lastHeardTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4, T8b949e// the last time we've seen this node in secs since 1970
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffdevice_metricsTa5d6ff"Tb4b4b4, Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4) Tff7b72var Te6edf3deviceTelemetryTb4b4b4: Te6edf3Telemetry Tff7b72= Te6edf3TelemetryTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72var Te6edf3channelTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffvia_mqttTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3viaMqttTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffhops_awayTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3hopsAwayTb4b4b4: Tffa657Int Tff7b72= Tff7b72-T79c0ff1Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffis_favoriteTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3isFavoriteTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffis_ignoredTa5d6ff"Tb4b4b4, Te6edf3defaultValue Tff7b72= Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4) Tff7b72var Te6edf3isIgnoredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffis_mutedTa5d6ff"Tb4b4b4, Te6edf3defaultValue Tff7b72= Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4) Tff7b72var Te6edf3isMutedTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffenvironment_metricsTa5d6ff"Tb4b4b4, Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4)
Tff7b72var Te6edf3environmentTelemetryTb4b4b4: Te6edf3Telemetry Tff7b72= Te6edf3TelemetryTb4b4b4(Tb4b4b4)Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffpower_metricsTa5d6ff"Tb4b4b4, Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4) Tff7b72var Te6edf3powerTelemetryTb4b4b4: Te6edf3Telemetry Tff7b72= Te6edf3TelemetryTb4b4b4(Tb4b4b4)Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffair_quality_metricsTa5d6ff"Tb4b4b4, Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4, Te6edf3defaultValue Tff7b72= Ta5d6ff"Ta5d6ffx''Ta5d6ff"Tb4b4b4)
Tff7b72var Te6edf3airQualityTelemetryTb4b4b4: Te6edf3Telemetry Tff7b72= Te6edf3TelemetryTb4b4b4(Tb4b4b4)Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3typeAffinity Tff7b72= Te6edf3ColumnInfoTb4b4b4.Te6edf3BLOBTb4b4b4) Tff7b72var Te6edf3paxcounterTb4b4b4: Te6edf3Paxcount Tff7b72= Te6edf3PaxcountTb4b4b4(Tb4b4b4)Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffpublic_keyTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3publicKeyTb4b4b4: Te6edf3ByteString? Tff7b72= Tff7b72nullTb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffnotesTa5d6ff"Tb4b4b4, Te6edf3defaultValue Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72var Te6edf3notesTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffmanually_verifiedTa5d6ff"Tb4b4b4, Te6edf3defaultValue Tff7b72= Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4)
Tff7b72var Te6edf3manuallyVerifiedTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4, T8b949e// ONLY set true when scanned/imported manually
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffnode_statusTa5d6ff"Tb4b4b4) Tff7b72var Te6edf3nodeStatusTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
T8b949e/** The transport mechanism this node was last heard over (see [MeshPacket.TransportMechanism]). */
Tf0883e@ColumnInfoTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6fflast_transportTa5d6ff"Tb4b4b4, Te6edf3defaultValue Tff7b72= Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4) Tff7b72var Te6edf3lastTransportTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3deviceMetricsTb4b4b4: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3DeviceMetricsTff7b72?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3deviceTelemetryTb4b4b4.Te6edf3device_metrics

Tff7b72val Te6edf3environmentMetricsTb4b4b4: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3EnvironmentMetricsTff7b72?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3environmentTelemetryTb4b4b4.Te6edf3environment_metrics

Tff7b72val Te6edf3powerMetricsTb4b4b4: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3PowerMetricsTff7b72?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3powerTelemetryTb4b4b4.Te6edf3power_metrics

Tff7b72val Te6edf3airQualityMetricsTb4b4b4: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3AirQualityMetricsTff7b72?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3airQualityTelemetryTb4b4b4.Te6edf3air_quality_metrics

Tff7b72val Te6edf3isUnknownUser
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3userTb4b4b4.Te6edf3hw_model Tff7b72=Tff7b72= Te6edf3HardwareModelTb4b4b4.Te6edf3UNSET

Tff7b72val Te6edf3hasPKC
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3public_keyTb4b4b4)Tb4b4b4.Te6edf3size Tff7b72> T79c0ff0

Tff7b72fun Td2a8ffsetPositionTb4b4b4(Te6edf3pTb4b4b4: Te6edf3WirePositionTb4b4b4, Te6edf3defaultTimeTb4b4b4: Tffa657Int Tff7b72= Te6edf3currentTimeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3position Tff7b72= Te6edf3pTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3time Tff7b72= Tff7b72if Tb4b4b4(Te6edf3pTb4b4b4.Te6edf3time Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Te6edf3pTb4b4b4.Te6edf3time Tff7b72else Te6edf3defaultTimeTb4b4b4)
Te6edf3latitude Tff7b72= Te6edf3degDTb4b4b4(Te6edf3pTb4b4b4.Te6edf3latitude_i Tff7b72?: T79c0ff0Tb4b4b4)
Te6edf3longitude Tff7b72= Te6edf3degDTb4b4b4(Te6edf3pTb4b4b4.Te6edf3longitude_i Tff7b72?: T79c0ff0Tb4b4b4)
Tb4b4b4}

T8b949e/** true if the device was heard from recently */
Tff7b72val Te6edf3isOnlineTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3lastHeard Tff7b72> Te6edf3onlineTimeThresholdTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72companion Tff7b72object Tb4b4b4{
T8b949e// Convert to a double representation of degrees
Tff7b72fun Td2a8ffdegDTb4b4b4(Te6edf3iTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3i Tff7b72* T79c0ff1e-7

Tff7b72fun Td2a8ffdegITb4b4b4(Te6edf3dTb4b4b4: Tffa657DoubleTb4b4b4) Tff7b72= Tb4b4b4(Te6edf3d Tff7b72* T79c0ff1Te6edf3e7Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)

Tff7b72val Te6edf3ERROR_BYTE_STRINGTb4b4b4: Te6edf3ByteString Tff7b72= Te6edf3ByteArrayTb4b4b4(T79c0ff3T79c0ff2Tb4b4b4) Tb4b4b4{ T79c0ff0 Tb4b4b4}Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)

Tff7b72fun Td2a8ffcurrentTimeTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3nowSecondsTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8fftoModelTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3NodeTb4b4b4(
Te6edf3num Tff7b72= Te6edf3numTb4b4b4,
Te6edf3user Tff7b72= Te6edf3userTb4b4b4,
Te6edf3position Tff7b72= Te6edf3positionTb4b4b4,
Te6edf3snr Tff7b72= Te6edf3snrTb4b4b4,
Te6edf3rssi Tff7b72= Te6edf3rssiTb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3lastHeardTb4b4b4,
Te6edf3deviceMetrics Tff7b72= Te6edf3deviceMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3DeviceMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3channel Tff7b72= Te6edf3channelTb4b4b4,
Te6edf3viaMqtt Tff7b72= Te6edf3viaMqttTb4b4b4,
Te6edf3hopsAway Tff7b72= Te6edf3hopsAwayTb4b4b4,
Te6edf3isFavorite Tff7b72= Te6edf3isFavoriteTb4b4b4,
Te6edf3isIgnored Tff7b72= Te6edf3isIgnoredTb4b4b4,
Te6edf3isMuted Tff7b72= Te6edf3isMutedTb4b4b4,
Te6edf3environmentMetrics Tff7b72= Te6edf3environmentMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3EnvironmentMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3powerMetrics Tff7b72= Te6edf3powerMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3PowerMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3airQualityMetrics Tff7b72= Te6edf3airQualityMetrics Tff7b72?: Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3protoTb4b4b4.Te6edf3AirQualityMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3paxcounter Tff7b72= Te6edf3paxcounterTb4b4b4,
Te6edf3publicKey Tff7b72= Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3public_keyTb4b4b4,
Te6edf3notes Tff7b72= Te6edf3notesTb4b4b4,
Te6edf3nodeStatus Tff7b72= Te6edf3nodeStatusTb4b4b4,
Te6edf3lastTransport Tff7b72= Te6edf3lastTransportTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.08s